使用长按操纵器
使用长按操纵器可以使用户在 Kanzi 应用程序中长按节点。这样可以让应用程序在用户于节点上按下指针并按住您的长按操纵器中设定的时长时做出响应。例如,使用长按操纵器打开上下文菜单。请参阅为节点启用长按手势。
使用 长按 (Long Press) 触发器响应长按手势。例如,您可以更改用户按下节点时的节点外观。请参阅使用长按 (Long Press) 触发器。
长按操纵器是一种输入操纵器,您可以用于在 Kanzi 应用程序中添加手势识别到节点上。您可以通过 Kanzi Engine API 分配输入操纵器。请参阅使用输入操纵器。
通过完成教程学习如何使用长按操纵器。请参阅教程:平移、缩放、轻敲。
为节点启用长按手势
本节介绍了如何为任意节点启用长按手势。要为按钮 (Button) 节点启用长按,请参阅使用按钮 (Button) 触发器。
要为节点启用长按手势:
- 在 Kanzi Studio 中使用应用程序 (Application) 模板创建工程。
- 在工程 (Project) 中创建要启用长按手势的节点。
例如,创建 2D 空节点 (Empty Node 2D) 节点,将其命名为 LongPressNode,并添加内容到该节点。
- 在 中选择您在上一步中创建的节点,在属性 (Properties) 中添加可测试命中 (Hit Testable) 属性,并将其设置为启用。
当您启用属性时,用户能选取节点。
默认情况下,按钮 (Button)、列表框项容器 (List Box Item Container)、滚动视图 (Scroll View) 和 滑块 (Slider) 节点启用命中测试。 请参阅定义哪个节点接收用户输入。
- 在 工程 (Project) 中 按下 Alt 并右键点击 您创建的节点并选择别名 (Alias)。
Kanzi Studio 会创建一个别名(它指向您从中创建该别名的节点),并将该别名添加到它的含资源字典的最近祖先节点的资源字典中。
使用 #
符号后跟别名名称访问别名目标节点。
- 选择 > 导出 (Export) > 导出 KZB (Export KZB)。
Kanzi Studio 从 Kanzi Studio 工程创建 kzb 文件和配置文件。Kanzi Studio 将导出的文件存储在 <ProjectName>/Application/bin 目录或您在 > 的二进制导出目录 (Binary Export Directory) 属性中指定的位置。Kzb 文件包含 Kanzi Studio 工程中的所有节点和资源,您在本地化表中标记为本地化包的资源除外。
当您从 Visual Studio 中运行您的 Kanzi 应用程序时,您的应用程序就会加载 kzb 文件和配置文件。
- 在 Visual Studio 中打开存储在 <ProjectName>/Application/configs/platforms/win32 中的解决方案,并在实现应用程序逻辑的文件中创建并配置长按操纵器:
- 为
LongPressManipulator::LongPressMessage
消息定义处理程序。
例如,在实现应用程序逻辑的类的 public 部分后添加:
private:
//为 LongPressManipulator::LongPressMessage
消息定义处理程序,该消息来自
//具有可生成长按消息的输入操纵器的节点。
void onLongPress(LongPressManipulator::LongPressMessageArguments& messageArguments)
{
//添加处理长按事件的代码。
}
- 在
onProjectLoaded()
函数中创建 LongPressManipulator
操纵器并订阅其消息。
例如,添加:
virtual void onProjectLoaded() KZ_OVERRIDE
{
ScreenSharedPtr screen = getScreen();
Domain* domain = getDomain();
//使用别名获取LongPressNode 节点。
NodeSharedPtr longPressNode = screen->lookupNode<Node>("#LongPressNode");
//创建生成长按消息的输入操纵器。
LongPressManipulatorSharedPtr longPressManipulator = LongPressManipulator::create(domain);
//添加输入操纵器到LongPressNode 节点。
longPressNode->addInputManipulator(longPressManipulator);
//将长按持续时间设为 250 ms。默认持续时间为 500 ms。
//长按操纵器会在用户按下节点持续
//此时间量时识别该手势。
longPressManipulator->setPressDuration(chrono::milliseconds(250));
//订阅 LongPressNode 节点的 LongPressManipulator::LongPressMessage
消息。
// LongPressManipulator
操纵器在用户按下该节点
//获取您使用 LongPressManipulator::setPressDuration
函数设置的毫秒数时生成此消息。
longPressNode->addMessageHandler(LongPressManipulator::LongPressMessage, bind(&MyProject::onLongPress, this, placeholders::_1));
}
- 构建和运行应用程序。 请参阅部署 Kanzi 应用程序。
在应用程序中按下已启用长按手势的节点。应用程序执行您在处理程序中为 LongPressMessage
消息定义的行为。
使用长按 (Long Press) 触发器
使用 长按 (Long Press) 触发器响应长按手势。例如,您可以更改用户按下节点时的节点外观。
要使用长按 (Long Press) 触发器:
- 为节点启用长按手势。请参阅为节点启用长按手势。
- 定义您想通过长按 (Long Press) 触发器设置的行为。
例如,创建状态机,您可以定义状态以设置节点在长按 (Long Press) 触发器被反复触发时的外观。请参阅创建状态机。
- 在工程 (Project) 中,选择要为其添加触发器的节点,并在节点组件 (Node Components) > 触发器 (Triggers) 部分添加长按 (Long Press) 触发器。
- 在您在上一步创建的触发器中,点击 触发器设置 (Trigger Settings) 并在 触发器设置编辑器 (Trigger Settings Editor) 中禁用 设置已处理消息 (Set Message Handled) 属性。
当您禁用 设置已处理消息 (Set Message Handled) 属性,此触发器拦截消息,但不会停止消息。这样您可以让输入操纵器处理该消息。
- 在您创建的触发器中,选择 下拉菜单中的动作,并配置该动作。
例如,选择下一状态 (Next State) 动作并在动作设置中设置:- 目标项 (Target Item) 为使用您所创建的状态机的节点,以设置长按 (Long Press) 触发器被反复触发时节点的外观
- 状态组 (State Group) 为包含长按 (Long Press) 触发器被触发时要切换的状态的状态组
- 选择 > 导出 (Export) > 导出 KZB (Export KZB)。
- 构建和运行应用程序。 请参阅部署 Kanzi 应用程序。
在应用程序中按下已启用长按手势的节点。
在 API 中使用长按操纵器
有关详细信息,请参阅 API reference中的 LongPressManipulator
类。
另请参阅
教程:平移、缩放、轻敲
处理用户输入
使用点击操纵器
使用多击操纵器
部署 Kanzi 应用程序
使用触发器
打开导航